// console.log("xxx")

import { result } from "lodash"
import { array } from "snabbdom"


// // 参数固定长度
// function curry1(fn) {
//     let length = fn.length

//     return function _curry(...args1) {
//         if (args1.length < length) {
//             return function (...args2) {
//                 const args = args1.concat(args2)
//                 return _curry.call(this, ...args)
//             }
//         }

//         return fn.call(this, ...args1)
//     }
// }


// // function add(a, b, c, d, e){
// //     let nums = Array.from(arguments)
// //     console.log(nums.reduce((sum, number) => {
// //         return sum + number
// //     }, 0))

// // }


// // let plus = curry(add)
// // plus(1,2,3,4,5)




// // 参数不定长度
// // 只能执行，并不能返回结果！
// function curry(fn) {
//     let args = []

//     // 反正不能返回值，何不直接执行！？
//     let loadFn = function () {
//         const result = fn(...args)
//         console.log("result:", result)
//     }

//     let _curry = function (...args1) {
//         args = args.concat(args1)
        
//         // _curry.toString()
//         loadFn()
//         return _curry
//     }
//     // _curry.toString = function () {
//     //     const result = fn(...args)
//     //     console.log("result:", result)

//     //     // 这个 return 没有作用啊
//     //     return result
//     // }
//     return _curry
// }

// function add(...nums) {
//     const sum = nums.reduce((sum, number) => {
//         return sum + number
//     }, 0)

//     // console.log("sum:", sum)
//     return sum
// }

// let plus = curry(add)
// plus(1, 2)(3)(4, 5)



const arr = [
    {id: 4, name: "部门3", pid: 3},
    {id: 1, name: "总部", pid: 0},
    {id: 2, name: "部门1", pid: 1},
    {id: 3, name: "部门1", pid: 1},
    {id: 5, name: "部门2", pid: 2},
    {id: 6, name: "部门2", pid: 2}
]



function transfer() {
    let obj = {}

    arr.map(item => {
        obj[item.id] = item
    })

    let head = null
    for(let id in obj){
        let item = obj[id]
        if(!head && id == 1){
            head = item
        } else {
            let parent = obj[item.pid]
            parent.children = parent.children || []
            parent.children.push(item)
        }
    }


    console.log(head)
}

transfer(arr)



function bindThis(f, oTarget) {
    oTarget = oTarget?oTarget:window
        
    return function() {
        return f.apply(oTarget, arguments)
    }
}

function test() { 
    var r = bindThis(function(a, b){
        return this.test + a + b
    }, {test: 2})(2, 3); 
    return r === 7; 
}

console.log(test())


function getUrlParam(sUrl, sKey) {
    try{
        const searchStr = sUrl.match(/\?[\w+=\d+&?]*/gi)[0].replace("?","")
        const searchArr = searchStr.split("&")

        const arr = searchArr.map(item => {
            const keyValue = item.split("=")
            const key = keyValue[0]
            const value = keyValue[1]
            return {
                key,
                value
            }
        })


        let result = []
        if(sKey){
            result = arr.filter(item => sKey === item.key).map(item => item.value)
        }
        else{
            result = arr.map(item => item.value)
        }


        return result.length ===1 ? result[0] : result
    }
    catch(e){
        return {}
    }
}


console.log(getUrlParam("http://www.nowcoder.com?key=1&key=2&key=3&key=4&test1=4#hehe"))


Array.prototype.uniq = function (){
    return Array.from(new Set(this))
}


function test1() { 
    var a = [true, false, null, undefined, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq(); 
    return a.length === 10 && 
    a[1] === false && 
    a[0] === true && 
    a[3] === undefined && 
    a[2] === null && 
    isNaN(a[4]); 
}
console.log(test1())


function testEmail(str) {
    
}

console.log(test("252332076@qq.com"))



// 排列组合
var list = [
    ['热', '冷', '冰'], 
    ['大', '中', '小'], 
    ['重辣', '微辣'],
    ['重麻', '微麻']
];

function sortStrs(list) {
    
    const combineArr = (arr1, arr2) => {
        if(arr1.length < 1) return arr2

        return arr1.reduce((result, word)=>{
            return result.concat(arr2.map(word2 => word + word2))
        }, [])
    }


    const result = list.reduce((result,item) => {
        return combineArr(result, item)
    }, [])

    console.log("result: ", result)
}

sortStrs(list)


// 'abcd'.f() => 'd-c-b-a'
String.prototype.f = function () {
    if(this){
        let arr = this.split("").reverse().join("-")
        return arr
    }

    return ""
}

console.log('abcd'.f())


// 给定一个数组排序，使得奇数位的值不大于相邻偶数位的值。

function LCS( str1 ,  str2 ) {
    // write code here
    // str2 为短的字符串
    if(str2.length > str1.length){
      const temp = str1
      str1 = str2
      str2 = temp
    }
    
    let len = str2.length
    let i = 0
    let max = ""
    while(i<len){
      let j = len 
      while(i<j){
        const str = str2.slice(i,j)
        if(str1.indexOf(str)>-1){
            max = str.length>max.length?str:max
        }
        j--
      }
      i++
    }

    return max
  }

  console.log(LCS("u738sE8YS6h6kuy5HgBPMJwk09tLf6a6934QxntO1FOUR9nUaOt6d783xte8wkt28fMttWqpC6l12y51McN7GUC5036hJk4n64IZko1Y9nR4WmV6qaWf17I52P6mv418H9i7QEcB8COvdYuyP6GtmY1N1B9g0CqA9ApiARAR726Md5uZkMUM7WG7FQ8aJgY45F0KkTdV65oNuaX67c0543bS1J2JpKmamg93Rqf4u8l6mRenVtmCP44RE816AUB5662E3DrRPCUR33y94NSaI7yp13NwbvpFVbuQaMGtE5Y43uPxsYt2M8X4az16m1DA44qkR94Gr9asxlJjlhe7o4tA3q24IrJOA77ADap3ERC71EspC2iNTl47DarHZj8bV7D92g2i66e7AYok6UJfrV0s8h4dF240JypwJ42Hqs41Ah5Xvh0d923VgC26FXB8lw33SUxgPzGEo9pQ85X3UW5j7KVuAY704H8sr59miS2VIn3TFPRm3z9zR35AG48d6P34P6DQLyaWaBh9ac3L6zn0YFyfuJ6azvo01BB6D9pTIu0CnH94UI6F3m8RMVB2y657330ojdzaDN382TUaswy8Kp1ih63847Ss7Bv27T8DBBWV2zye2r04CiXvSQt4nXU26901g62iHXxXPt6036MKfgP52deALiW5760q400P2oOSrdgfIJ9IPm9eNneg3RH1EtATiw997Nl3D9u53akabOenB5iLsVp29u73Y0m84gI5LS4medbw92n4WC88Q781hO552q28d3W0gBWFb5GlNlb56z08vEd5gkbQ52yDlVm10T0UGZ6dwd4QZgGL4DG014cIP62lWY6cR1lZDuzaUWA83hmcu710WMxQ25vnhGy96j6przx4fz1WBqG1TJIcSKmziQ5ZEN5zm3JUWy4m669Oknz231TSZ01xo156IOvEj449LqjJhB7heihG5iWZko5jbZKT8m7FIP5aE55pq1QqT158m2Y6W1BYx2QkN2BQXmJW0WBioG5X7bN8qK3dOnE0EuO71OKigS0a6k7fK7A7Z3lPPPGiruD0n31h2VwItpL7e7PSlS54CWPweiv6zXrU410GtLzQZb8vS6vkRMq2836p6mo18M2OmA6oz40cS9a425j22hu28J4Qf3Fq9Bhv3yGVMx12v8teZ4VkXOT3yBAmfF8RKHPS9Y2bQ4hmTkaPXtU59j3T7HHEp1NSgst0XxN2r2ovVFo19psRNl9mbauJmEhhTIZtk1G1SsGp89d6jpMmfAVRO3jam1w165Z0y6s4gO4K05OgN2KW0zGFlQM75Jf15Rf2LDngt469SB6Hxq93fKT0cYuZ424pf3xe8Cv2xLf9Go51s4c64lrP20W62VL48EvBaL3yg9OeUl0qryFq7januHZZbGRUykWdQ8BsPO9VMcYF4AFk2i2k3QTPTy3L1k91w44r9tT6Rce0CEKWk5Y36cWTJWh14k21VQh3HST4uU7B1Ik8uNbJWSjX8gQoU8s364hVCYhY6Bxlc96YX6CBQi7ai07Eoyog1c5YFLzmCSNZ25lTa8hw9O13r0G99vB37PvrhinjH2VUg8pdXM6iCoLBo3Tn397i3Rad3Km71i9tucqEynJWpqX9yi2Z2OpCkdi18HYzGo78hjSIC37HFwyU792FTp5N4tSZl9ii1RB2qkbKgAJ7UYO3vXgwE7Ji4BigcpD5rB6MNg4sPPdxb4B0bO7ky7YcyT2b27sYt7LSHRs3pI9w6BJtCjgDn85d7Qt2UL8J49h13BcSELs6AgC6AxEomLa65wFHNPZTO2G1FR6p159QDvoR969K2EKOKH3xwer66KN0fB85IDhL0Jdc896NPCF3ucyd7jFdWowYuAGcsxQkf9K5M5vXY5x507t87C79yYeX8T7ez0DbV2nFhW9Vbm10V4kfU9PvG1yXfgqGOH14tD2hW5l27EFyDmMR46Y8lLIaD7rKtaR857G7v8SyX28RL86d293866Ni53MnRkW2r7A6o9X1T7mXxVWj1PMZeIph97VuQNBW6YPXcR9SIFGb61Nh46nUOoxqPG3gFqCaD3W59IEG8J4mRYkXz51UZA3DTm26n7LMO18Iq9b4iz07A07b0h219hpnMlPkPRdw2aofI81Yx0tQWTQzF0AQwYIs3g8sB8wpj4hvzFv3Jk421M1Q245B6VeYO89oiYwMk9JF58s0eBEjxJpHq1w9ku7gJ1bTs427fx1J32uF3Y637xNjV5m13jXTwU46EdN3kVf2JCta7u5ankW24gvkwb5iAe4bq7Oqu6814jha5ZarzTw0H20c9aT2MVLB927m94mvK3gpTIxd295kNm3QMCBBH36KI5r4v7Zjt026cik2JB408ehr81VXNIarAAqAv3n8s1EoLn5ujl1d0v3Z25Z1qjQ4f9w1VFnuTg868b9myuJoWmbuC38jSMrppJyH11Zmp30y1UIW15Y18i6vsU42jZ5596E907W886T7lxr5or13rY1MBRkKnQ9ZSq7k805sgf7zZvKFqmpF7MVwiD8C059oe8L9B17n0qP211z8rA4INju8t9Ks6g98M6xYNC4NPVa32FZG8NH5FeQurpw96g8L47Gu72D17i3eOh65RQpd9CTPHozihYxRqg2p2HqNs050lYm8EX69j1jNwJ3E3vGgjV9mz5D88uoW1c5ZuYK187yo2L79QXs9sT5LK6g4JdeY2G7r8xXCTmEHAc9irs459G3pgVH8ajR9v9j3YccENNCAfB5M3M7Y3SYi01a0q74QX8042I7V9G27q8217rr50bA6eJDozeYbQt5o58AdFcB7Qx5xa7mFVr4Q805SB1sm37vHCLa2FiryC0U58iNBmS84h20yDzL88DMn99k2vh1vQ83vo217Zmkm8WZBcO5348TCndW6eDjYlu7I9719p7oIE3cBqZa6ouOBlzwATn2814881Ea94k7481D45SvN4Mo439i7oJEpSklF0v4V374z2MbxOeiQI64aS7OwL7gCF847WZs6xC8hR74t8qnZ9H8575NFh887RQVwxnw7327Q33EB5k2H1KLc5m3eUuCVGi7wfhaKMGeQAcW4PLRByvvAET6CKZ8C98V339ltcZG9LSZppDqBnSo8J6CP53GT8jh6hE4LLVUi2yQS6W4OtH9nwZN92qC9bHrZ8PH7FlnF709MU411t8AqtK546R4DkP55bM25w54EF1Pj11JUIb2bXQHzCDR482d7ZwMfg8q8YWGLIbTHKBdlz8Sb021z4M7hBrK0O8tHdsq1WA662W5EirwTJ5j342uC02npjIhr4k6mHLXOIzj3gQDlh96HKRD5suViiKqZlF7a1glL5GcZN5kd0456sbGeA3JPH70x9ByX9Q9lvWPXOUfpAL16kd6ba4yrb3em5v77kp99vfG4L8zRmz03BFKHW9530NZDlo6kEo690r0fdmBZ0mhbz5I7GMb2nSjd4g1OJCGS2YmljZRHcm6qW11rHZHz3wf6jj3gEucWU8w688soPWxHxg3W0Xy6M6A6re1ecbe93Db6aa4i7736T1e8qtQJfAa2UqDazIN0Dp1oOro97aO0ex5tL3ne7533j1GNJK2kp9rmi900BY89vJ6y9WDfms4O2B8pLcV7YD6QWzQ2Si1Oo3dq8i741l0YyDn7w9tyDI3e656803s9b81taaUlt113n7ZnI3XH2GQcbniTNmlriLLNgY9dcUCqL4279012RHA3Hl02PEdCCH9uaS7BrPwH8d2uq9TiJg8Cj4nK3NazCjbtQWBoQ64U3T8xT2xl2OLtOXeqmS5CC5Q23d1X208ZGvoGBYqi748v3o6z8kJ2Faw2fHdq95Iw2rV8Z3IGZTp52Zx8PH8nBYom9USM011amCFdP6uQykl9X1PSF09FY41PKC49fJRBN38LLlySoP42Ph4lsI5axm8m116HLAWMQLLaShq72N0vf6c12nLtb0tJ4cbjjP6vG76Jxl7Ym0XdJhMLOzJ6knY31cH8osg52uIXqv85OnE486HETf5vDJX7gDMQ5n20t3O1N5TQh3546V1LK21rBdEybhaHlHxBd5N098F1DiB1JqG43EJQb8j9jP14yXE54mrj1cRdj8iHibrF4fUroo80x9240H1nX09Td9K5pHczfc4UTBsLqvwkce5h0vD1e8V292DUm2zMohF3Nh6Z1v16v7KZ96SO6M4qCoVI4EjT0VPILzyvQI904S28M5R77VERfP21xo9oMbRf4RmmijfRIVeCU6C3Khh148lraZkA09x9X3uU2vR3Q322kPH7oiZw5ek0czklQrSO9zHA25Kk8rR3dN2HPeSY52n5Y1Q3s91a0ph03CfPbKEi307EWFkV5k4hMEZL2yP49WV1XLySDA0809Z71EVchD6gcOs0O4S3iN05mGdpP1eA5D79Clsd7GKAJx3lZ2peVn3fwr1FSukR1ui5YovUQneO983MVw65VsRGN0572scB9jVCkk9innhWbibsB0IZ73UA2Es10XOuXwl02aKOa1wp36cO4Kph3w6hMAOshH1uGHL59sOs7Q3BEk0qVzwf0g2BH64g8JaLr1CWaMS4VzmxKA4LdQhWjHWyRm8X4NkEP4R02NWeH8K2gdM0Yl8a289O81gO7R50sT0RRy6M76QH2wZJE2057zuxQlV38wb6Ug0aYD0N77v3G9PK18U0UgrPNXXxL3r79e9M250pYUbQxV99L21sqXdLyE90QEK8bD54Ra71r0512HPCk66Y1IyoeC9m14qW5SL01Kf3Yptov351cuh6ZQ5Ck7RDmVFHsU9E4k1T3PoLamB448bEwahWtK71DwFf8Xne39BL1X4N8bo3U9P61mK6313i9dh1QfwZN8PaZ6ZH4yb07ndF64jeX18Zr698PQzjAJLcfRnLqlcu8n7w5C9LNXBNuM2QdnuBaG48vS0ClnhFp7AzcKaYa6tE7Dw0WDghxLAa4f","u738sE8YS6h6kuy5HgBPMJwk09tLf6a6934QxntO1FOUR9nUaOt6d783xte8wkt28fMttWqpC6l12y51McN7GUC5036hJk4n64IZko1Y9nR4WmV6qaWf17I52P6mv418H9i7QEcB8COvdYuyP6GtmY1N1B9g0CqA9ApiARAR726Md5uZkMUM7WG7FQ8aJgY45F0KkTdV65oNuaX67c0543bS1J2JpKmamg93Rqf4u8l6mRenVtmCP44RE816AUB5662E3DrRPCUR33y94NSaI7yp13NwbvpFVbuQaMGtE5Y43uPxsYt2M8X4az16m1DA44qkR94Gr9asxlJjlhe7o4tA3q24IrJOA77ADap3ERC71EspC2iNTl47DarHZj8bV7D92g2i66e7AYok6UJfrV0s8h4dF240JypwJ42Hqs41Ah5Xvh0d923VgC26FXB8lw33SUxgPzGEo9pQ85X3UW5j7KVuAY704H8sr59miS2VIn3TFPRm3z9zR35AG48d6P34P6DQLyaWaBh9ac3L6zn0YFyfuJ6azvo01BB6D9pTIu0CnH94UI6F3m8RMVB2y657330ojdzaDN382TUaswy8Kp1ih63847Ss7Bv27T8DBBWV2zye2r04CiXvSQt4nXU26901g62iHXxXPt6036MKfgP52deALiW5760q400P2oOSrdgfIJ9IPm9eNneg3RH1EtATiw997Nl3D9u53akabOenB5iLsVp29u73Y0m84gI5LS4medbw92n4WC88Q781hO552q28d3W0gBWFb5GlNlb56z08vEd5gkbQ52yDlVm10T0UGZ6dwd4QZgGL4DG014cIP62lWY6cR1lZDuzaUWA83hmcu710WMxQ25vnhGy96j6przx4fz1WBqG1TJIcSKmziQ5ZEN5zm3JUWy4m669Oknz231TSZ01xo156IOvEj449LqjJhB7heihG5iWZko5jbZKT8m7FIP5aE55pq1QqT158m2Y6W1BYx2QkN2BQXmJW0WBioG5X7bN8qK3dOnE0EuO71OKigS0a6k7fK7A7Z3lPPPGiruD0n31h2VwItpL7e7PSlS54CWPweiv6zXrU410GtLzQZb8vS6vkRMq2836p6mo18M2OmA6oz40cS9a425j22hu28J4Qf3Fq9Bhv3yGVMx12v8teZ4VkXOT3yBAmfF8RKHPS9Y2bQ4hmTkaPXtU59j3T7HHEp1NSgst0XxN2r2ovVFo19psRNl9mbauJmEhhTIZtk1G1SsGp89d6jpMmfAVRO3jam1w165Z0y6s4gO4K05OgN2KW0zGFlQM75Jf15Rf2LDngt469SB6Hxq93fKT0cYuZ424pf3xe8Cv2xLf9Go51s4c64lrP20W62VL48EvBaL3yg9OeUl0qryFq7januHZZbGRUykWdQ8BsPO9VMcYF4AFk2i2k3QTPTy3L1k91w44r9tT6Rce0CEKWk5Y36cWTJWh14k21VQh3HST4uU7B1Ik8uNbJWSjX8gQoU8s364hVCYhY6Bxlc96YX6CBQi7ai07Eoyog1c5YFLzmCSNZ25lTa8hw9O13r0G99vB37PvrhinjH2VUg8pdXM6iCoLBo3Tn397i3Rad3Km71i9tucqEynJWpqX9yi2Z2OpCkdi18HYzGo78hjSIC37HFwyU792FTp5N4tSZl9ii1RB2qkbKgAJ7UYO3vXgwE7Ji4BigcpD5rB6MNg4sPPdxb4B0bO7ky7YcyT2b27sYt7LSHRs3pI9w6BJtCjgDn85d7Qt2UL8J49h13BcSELs6AgC6AxEomLa65wFHNPZTO2G1FR6p159QDvoR969K2EKOKH3xwer66KN0fB85IDhL0Jdc896NPCF3ucyd7jFdWowYuAGcsxQkf9K5M5vXY5x507t87C79yYeX8T7ez0DbV2nFhW9Vbm10V4kfU9PvG1yXfgqGOH14tD2hW5l27EFyDmMR46Y8lLIaD7rKtaR857G7v8SyX28RL86d293866Ni53MnRkW2r7A6o9X1T7mXxVWj1PMZeIph97VuQNBW6YPXcR9SIFGb61Nh46nUOoxqPG3gFqCaD3W59IEG8J4mRYkXz51UZA3DTm26n7LMO18Iq9b4iz07A07b0h219hpnMlPkPRdw2aofI81Yx0tQWTQzF0AQwYIs3g8sB8wpj4hvzFv3Jk421M1Q245B6VeYO89oiYwMk9JF58s0eBEjxJpHq1w9ku7gJ1bTs427fx1J32uF3Y637xNjV5m13jXTwU46EdN3kVf2JCta7u5ankW24gvkwb5iAe4bq7Oqu6814jha5ZarzTw0H20c9aT2MVLB927m94mvK3gpTIxd295kNm3QMCBBH36KI5r4v7Zjt026cik2JB408ehr81VXNIarAAqAv3n8s1EoLn5ujl1d0v3Z25Z1qjQ4f9w1VFnuTg868b9myuJoWmbuC38jSMrppJyH11Zmp30y1UIW15Y18i6vsU42jZ5596E907W886T7lxr5or13rY1MBRkKnQ9ZSq7k805sgf7zZvKFqmpF7MVwiD8C059oe8L9B17n0qP211z8rA4INju8t9Ks6g98M6xYNC4NPVa32FZG8NH5FeQurpw96g8L47Gu72D17i3eOh65RQpd9CTPHozihYxRqg2p2HqNs050lYm8EX69j1jNwJ3E3vGgjV9mz5D88uoW1c5ZuYK187yo2L79QXs9sT5LK6g4JdeY2G7r8xXCTmEHAc9irs459G3pgVH8ajR9v9j3YccENNCAfB5M3M7Y3SYi01a0q74QX8042I7V9G27q8217rr50bA6eJDozeYbQt5o58AdFcB7Qx5xa7mFVr4Q805SB1sm37vHCLa2FiryC0U58iNBmS84h20yDzL88DMn99k2vh1vQ83vo217Zmkm8WZBcO5348TCndW6eDjYlu7I9719p7oIE3cBqZa6ouOBlzwATn2814881Ea94k7481D45SvN4Mo439i7oJEpSklF0v4V374z2MbxOeiQI64aS7OwL7gCF847WZs6xC8hR74t8qnZ9H8575NFh887RQVwxnw7327Q33EB5k2H1KLc5m3eUuCVGi7wfhaKMGeQAcW4PLRByvvAET6CKZ8C98V339ltcZG9LSZppDqBnSo8J6CP53GT8jh6hE4LLVUi2yQS6W4OtH9nwZN92qC9bHrZ8PH7FlnF709MU411t8AqtK546R4DkP55bM25w54EF1Pj11JUIb2bXQHzCDR482d7ZwMfg8q8YWGLIbTHKBdlz8Sb021z4M7hBrK0O8tHdsq1WA662W5EirwTJ5j342uC02npjIhr4k6mHLXOIzj3gQDlh96HKRD5suViiKqZlF7a1glL5GcZN5kd0456sbGeA3JPH70x9ByX9Q9lvWPXOUfpAL16kd6ba4yrb3em5v77kp99vfG4L8zRmz03BFKHW9530NZDlo6kEo690r0fdmBZ0mhbz5I7GMb2nSjd4g1OJCGS2YmljZRHcm6qW11rHZHz3wf6jj3gEucWU8w688soPWxHxg3W0Xy6M6A6re1ecbe93Db6aa4i7736T1e8qtQJfAa2UqDazIN0Dp1oOro97aO0ex5tL3ne7533j1GNJK2kp9rmi900BY89vJ6y9WDfms4O2B8pLcV7YD6QWzQ2Si1Oo3dq8i741l0YyDn7w9tyDI3e656803s9b81taaUlt113n7ZnI3XH2GQcbniTNmlriLLNgY9dcUCqL4279012RHA3Hl02PEdCCH9uaS7BrPwH8d2uq9TiJg8Cj4nK3NazCjbtQWBoQ64U3T8xT2xl2OLtOXeqmS5CC5Q23d1X208ZGvoGBYqi748v3o6z8kJ2Faw2fHdq95Iw2rV8Z3IGZTp52Zx8PH8nBYom9USM011amCFdP6uQykl9X1PSF09FY41PKC49fJRBN38LLlySoP42Ph4lsI5axm8m116HLAWMQLLaShq72N0vf6c12nLtb0tJ4cbjjP6vG76Jxl7Ym0XdJhMLOzJ6knY31cH8osg52uIXqv85OnE486HETf5vDJX7gDMQ5n20t3O1N5TQh3546V1LK21rBdEybhaHlHxBd5N098F1DiB1JqG43EJQb8j9jP14yXE54mrj1cRdj8iHibrF4fUroo80x9240H1nX09Td9K5pHczfc4UTBsLqvwkce5h0vD1e8V292DUm2zMohF3Nh6Z1v16v7KZ96SO6M4qCoVI4EjT0VPILzyvQI904S28M5R77VERfP21xo9oMbRf4RmmijfRIVeCU6C3Khh148lraZkA09x9X3uU2vR3Q322kPH7oiZw5ek0czklQrSO9zHA25Kk8rR3dN2HPeSY52n5Y1Q3s91a0ph03CfPbKEi307EWFkV5k4hMEZL2yP49WV1XLySDA0809Z71EVchD6gcOs0O4S3iN05mGdpP1eA5D79Clsd7GKAJx3lZ2peVn3fwr1FSukR1ui5YovUQneO983MVw65VsRGN0572scB9jVCkk9innhWbibsB0IZ73UA2Es10XOuXwl02aKOa1wp36cO4Kph3w6hMAOshH1uGHL59sOs7Q3BEk0qVzwf0g2BH64g8JaLr1CWaMS4VzmxKA4LdQhWjHWyRm8X4NkEP4R02NWeH8K2gdM0Yl8a289O81gO7R50sT0RRy6M76QH2wZJE2057zuxQlV38wb6Ug0aYD0N77v3G9PK18U0UgrPNXXxL3r79e9M250pYUbQxV99L21sqXdLyE90QEK8bD54Ra71r0512HPCk66Y1IyoeC9m14qW5SL01Kf3Yptov351cuh6ZQ5Ck7RDmVFHsU9E4k1T3PoLamB448bEwahWtK71DwFf8Xne39BL1X4N8bo3U9P61mK6313i9dh1QfwZN8PaZ6ZH4yb07ndF64jeX18Zr698PQzjAJLcfRnLqlcu8n7w5C9LNXBNuM2QdnuBaG48vS0ClnhFp7AzcKaYa6tE7Dw0WDghxLAaf"))
